package appvideo;
//import java.awt.event.*; 
import java.sql.SQLException;
import java.util.*;
import appvideo.logica.Promociones;
import appvideo.logica.PromocionesDiasSemana;
import appvideo.logica.PromocionesGenero;
import appvideo.logica.PromocionesMasPorMenos;
import appvideo.logica.PromocionesPuntos;
import appvideo.persistencia.PersistenciaPromocion;
import java.text.*;
public class SubMenu_gestionPromociones {
    //Función para limpiar pantalla
    public static void limpiaPantalla(){ 
        
        for ( int i = 0 ; i < 25 ; i++ ){
            System.out.println();
        }
    }    
    //Menú común de Gestión
    //==========================================================================
    public static void menuPromociones() {
    int opcionMenu=0;
     
        do{
            try{
                limpiaPantalla();
                
                //Encabezado
                System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones **");
                System.out.println("===========================================");
                System.out.println("(Selecciona el tipo de gestión que deseas realizar)");

                //Solicita selección del Menú
                opcionMenu = ObtenerTeclado.dameEntero("\n1. Nueva Promoción" + 
                                                       "\n2. Modificar Promoción" +
                                                       "\n3. Consultar Promociones" +
                                                       "\n4. Menú Principal");                
                switch(opcionMenu){
                    case 1: //Agrega nueva promoción
                        menuTiposPromociones(1);                                                
                        break;
                    case 2: //Modifica promoción
                        menuTiposPromociones(2);      
                        break;
                    case 3: //Consulta promoción
                        menuTiposPromociones(3);      
                        break;
                    case 4: //Volver al Menú Principal
                        limpiaPantalla();
                        main.opc=0;
                        break;                        
                    default: //En caso de teclear numero no existente en menú
                        System.out.println("Selecciona el número de opción");                                                      
                        break;                        
                }
                                
            }catch(NumberFormatException nme){ //Caracter de tipo no númerico
                    System.out.println("Selecciona el número de opción");  
                    opcionMenu=0;
                    break;
             }
                
        }while(opcionMenu<1 || opcionMenu>4);
    
    }    
    //Menú de tipos de Promociones
    //=========================================================================
    public static void menuTiposPromociones(int tipoGestion){
        int opcionMenu=0;
        String msj="";
        Promociones tipo=null;
            do{
                try{
                    limpiaPantalla();
                
                    switch(tipoGestion){
                        case 1:
                            msj="Nueva Promoción";
                            break;
                        case 2:
                            msj="Modifica Promoción";
                            break;
                        case 3:
                            msj="Consulta Promoción";                            
                            break;
                    }
                    
                //Encabezado
                System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//" + msj + " **");                
                System.out.println("===========================================");
                System.out.println("(Selecciona el tipo de Promoción)");
                
                    opcionMenu=ObtenerTeclado.dameEntero("\n1. Día Feliz (Descuento un día de la semana)" + 
                                                         "\n2. Género o Plataforma" + 
                                                         "\n3. Más por Menos !! (Paga menos por más)" + 
                                                         "\n4. Regalo de puntos por alquiler" + 
                                                         "\n5. *** PROMOCIONES ACTIVAS EL DIA DE HOY ***" +
                                                         "\n6. Menú Promociones");
                                                         
                    switch(opcionMenu){
                        case 1: //Dia Feliz
                            limpiaPantalla();
                            tipo = new PromocionesDiasSemana();
                            if(tipoGestion==1){ //Ejecuta método para crear nueva promoción                                                                
                                PromocionesDiasSemana pDS = nuevaDiaFeliz();
                                try {
                                    pDS.insertaPromocion();                                    
                                } catch (SQLException ex) {
                                    System.out.println(ex.getMessage());
                                }
                            }else if(tipoGestion==2){ //Ejecuta método para modificar promoción                               
                                PromocionesDiasSemana pDS = modificaDiaFeliz();
                                try{
                                    pDS.modificaPromocion();                                    
                                } catch (SQLException ex){
                                    System.out.println(ex.getMessage());
                                }                                                                
                            }else if(tipoGestion==3){
                                
                                visualizarPromociones(tipo);
                                //visualizarPromocionesActivas(tipo);
                                
                                //consultaDiaFeliz();
                            }                                                 
                            break;
                        case 2: //Género
                            limpiaPantalla();
                            tipo = new PromocionesGenero();
                            if(tipoGestion==1){ //Ejecuta método para modificar promoción 
                                PromocionesGenero pDS = nuevaGenero();
                                try {
                                    pDS.insertaPromocion();
                                } catch (SQLException ex) {
                                    System.out.println(ex.getMessage());
                                }
                            }else if(tipoGestion ==2){
                                PromocionesGenero pDS = modificaGenero();
                                try{
                                    pDS.modificaPromocion();                                    
                                } catch (SQLException ex){
                                    System.out.println(ex.getMessage());
                                }                                                                
                            }else if(tipoGestion == 3){
                                visualizarPromociones(tipo);
                            }                                                  
                            break; 
                        case 3: //Más por Menos
                            limpiaPantalla();
                            tipo = new PromocionesMasPorMenos();
                            if(tipoGestion==1){ //Ejecuta método para modificar promoción 
                                PromocionesMasPorMenos pDS = nuevaMasMenos();
                                try {
                                    pDS.insertaPromocion();
                                } catch (SQLException ex) {
                                    System.out.println(ex.getMessage());
                                }
                            }else if(tipoGestion ==2){
                                PromocionesMasPorMenos pDS = modificaMasMenos();
                                try{
                                    pDS.modificaPromocion();                                    
                                } catch (SQLException ex){
                                    System.out.println(ex.getMessage());
                                }                                                                
                            }else if(tipoGestion == 3){
                                visualizarPromociones(tipo);
                            }                                                  
                            break; 
                        case 4: //Puntos
                          limpiaPantalla();
                          tipo = new PromocionesPuntos();
                            if(tipoGestion==1){ //Ejecuta método para modificar promoción 
                                PromocionesPuntos pDS = nuevaPuntos();
                                try {
                                    pDS.insertaPromocion();
                                } catch (SQLException ex) {
                                    System.out.println(ex.getMessage());
                                }
                            }else if(tipoGestion ==2){
                                PromocionesPuntos pDS = modificaPuntos();
                                try{
                                    pDS.modificaPromocion();                                    
                                } catch (SQLException ex){
                                    System.out.println(ex.getMessage());
                                }                                                                
                            }else if(tipoGestion == 3){
                                visualizarPromociones(tipo);
                            }                                                  
                            break;                             
                        case 5:
                            //Encabezado               
                            System.out.println("===========================================");
                            System.out.println("(Promociones activas)");                              
                            
                            visualizarPromocionesActivasTodas();                           
                                                          
                            System.out.println("===========================================");    
                            
                            break;                                                                                    
                        case 6:
                            menuPromociones(); 
                            //opcionMenu=0;
                            break;
                        default: //En caso de teclear número no existente en menú
                            System.out.println("Selecciona el número de opción");                                                      
                            break;                                      
                    }
                    menuPromociones();
                }   catch(NumberFormatException nme){
                    System.out.println("Selecciona el número de opción");                    
                    break;
                    }
                
            }while(opcionMenu<1 || opcionMenu>6);
    }        
    //Crea promoción Dia Feliz
    public static PromocionesDiasSemana nuevaDiaFeliz(){                
        String pNombre="";
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        Boolean pActivo; //True = Activo 
        int pDia;
        double pDescuento;        
        
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Día Feliz");                
        System.out.println("===========================================");
        System.out.println("(Crear nueva promoción)");     
        
        //Solicita campos
        do{
            pNombre = ObtenerTeclado.dameCadenaCompleta("Nombre de la promoción :");              
        }while("".equals(pNombre));
                
        //Solicita Fecha de Inicio
        do{
            pFechaInicio = ObtenerTeclado.dameFecha("Fecha de inicio de la promoción (dd/mm/yyyy):");
        }while(pFechaInicio == null);

        //Solicita Fecha Final        
        do{
            pFechaFinal = ObtenerTeclado.dameFecha("Fecha final de la promoción (dd/mm/yyyy):");
            if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                pFechaFinal=null;
            }
        }while(pFechaFinal == null);
                
        //Solicita Día de la semana
        do{
            pDia = ObtenerTeclado.dameEntero("Indica el día de la promoción (1-7) :");
        }while(pDia <1 || pDia>7);
        
        //Solicita Porcentaje de descuento
        do{
            pDescuento = ObtenerTeclado.dameEntero("Indica el Descuento de la promoción (Entero) :");
        }while(pDescuento <1 || pDescuento >100);
                        
        //Crea objeto
        PromocionesDiasSemana nuevaProm = new PromocionesDiasSemana(pNombre.toUpperCase(), pFechaInicio, pFechaFinal, true, pDia, pDescuento, "Día Feliz");                                             
        
        return nuevaProm;
    }
    //Muestra promociones por tipo (Polimorfismo)
    public static void visualizarPromociones(Promociones promociones){
        List<Promociones> lst = new ArrayList();
        Promociones prom = promociones;
        
        lst=prom.visualizarPromociones("*");
                               
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones          
        System.out.println();        
        for(Promociones p: lst){
            System.out.println(p);            
        }        
        System.out.println("==========================================="); 
        String pausa = ObtenerTeclado.dameTecla("");
     }
    //Modifica Día Feliz
    public static PromocionesDiasSemana modificaDiaFeliz(){
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        Boolean pActivo; //True = Activo 
        String ppActivo;
        int pDia=0;
        double pDescuento=0;
        int cuenta=0;
        List<PromocionesDiasSemana> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy"); 
        PromocionesDiasSemana prom = null;
                 
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Día Feliz");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromociones("*");                
        System.out.println();        
        for(PromocionesDiasSemana l: lst){
            System.out.println(l);            
        }        
        System.out.println("===========================================");
       
        //Solicita el nombre de la promoción a modificar
        do{
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("*** Indica el nombre de la promoción a modificar : ***");  
            }while("".equals(pNombre));
            
            lst = PersistenciaPromocion.getPromociones(pNombre.toUpperCase());            
            cuenta = lst.size();                       
                                    
            if(cuenta==0){
                System.out.println("**** Este nombre de promoción no existe, intentalo nuevamente... ****");
                System.out.println();
            }
        }while (cuenta==0);            
        
       limpiaPantalla();
        //Encabezado de modificación
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Día Feliz");                
        System.out.println("===========================================");
        System.out.println("(Modificando Promoción: " + pNombre.toUpperCase() + ")");          
        
        PromocionesDiasSemana edi = new PromocionesDiasSemana(lst.get(0).getId(),lst.get(0).getNombre(),lst.get(0).getFechaInicio(),lst.get(0).getFechaFinal(),lst.get(0).isActiva(),lst.get(0).getDia(),lst.get(0).getDescuento(),"Día Feliz");        
        
        //Modificar campos
        String pregunta = "";
        
        //Modificar nombre de la promoción
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar nombre de la promoción (si/no)? *** Valor actual : "+"("+edi.getNombre()+") ***");
        }while ("".equals(pregunta));        
        if("si".equals(pregunta)){
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("Indica el nuevo nombre de la promoción :" );  
            }while("".equals(pNombre));            
        }else{
            pNombre=edi.getNombre();
        }
            
        //Modificar fecha de inicio
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha de inicio de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaInicio())+") ***");
        }while("".equals(pregunta));        
        if("si".equals(pregunta)){
            do{
                pFechaInicio = ObtenerTeclado.dameFecha("Indica la nueva fecha de inicio de la Promoción (dd/mm/yyyy) :");
              }while(pFechaInicio == null);                
        }else{
            pFechaInicio=edi.getFechaInicio();
        }        
                
        //Modificar fecha fin
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha final de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaFinal())+") ***");
        }while("".equals(pregunta));        
        if("si".equals(pregunta)){
            do{
                pFechaFinal = ObtenerTeclado.dameFecha("Indica la nueva fecha final de la Promoción (dd/mm/yyyy) :");
                    if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                        System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                        pFechaFinal=null;
            }
              }while(pFechaFinal == null);                
        }else{
            pFechaFinal=edi.getFechaFinal();
        }                
        
        //Devuelve en texto el estado 
        String estadoActiva="";
        if (edi.isActiva()){
            estadoActiva="Activa";            
        }else{
            estadoActiva="Inactiva";
        }
        
        
        //Modifica estado de la promoción
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar estado de la promoción (si/no)? *** Valor actual : ("+estadoActiva+") ***");
        }while("".equals(pregunta));        
        if("si".equals(pregunta)){
                do{
                    ppActivo = ObtenerTeclado.dameCadenaCompleta("Activar promoción (si/no)? :");  
                }while("".equals(ppActivo));                
                if ("si".equals(ppActivo)){
                    pActivo=true;
                }else{
                    pActivo=false;
                }
        }else{
            pActivo=edi.isActiva();
        }

        //Modifica día de la promoción
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar día de la promoción (si/no)? *** Valor actual : ("+edi.getDia()+") ***");                               
        }while("".equals(pregunta));        
        if("si".equals(pregunta)){
            do{
                pDia = ObtenerTeclado.dameEntero("Indica el nuevo día de la promoción (1-7):");           
            }while(pDia<1 || pDia>8);                
        }else{
            pDia=edi.getDia();
        }     

        //Modifica porcentaje de descuento
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar porcentaje de descuento de la promoción (si/no)? *** Valor actual : ("+edi.getDescuento()+") ***");                               
        }while("".equals(pregunta));        
        if("si".equals(pregunta)){
            do{
                pDescuento = ObtenerTeclado.dameEntero("Indica el nuevo porcentaje de la promoción (Entero):");           
            }while (pDescuento <1 || pDescuento>100);
                
        }else{
            pDescuento=edi.getDescuento();
        }                                   
        
        //Crea objeto
        PromocionesDiasSemana modificaProm = new PromocionesDiasSemana(edi.getId(),pNombre.toUpperCase(), pFechaInicio, pFechaFinal, pActivo, pDia, pDescuento, "Día Feliz");                                                                     
        
        return modificaProm;                                       
    }
    //Consulta promociones por Género
    public static void consultaGenero(){
        List<PromocionesGenero> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
                 
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Genero");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromocionesGenero("*");        
        System.out.println();        
        for(PromocionesGenero l: lst){
            System.out.println(l);            
        }        
        System.out.println("===========================================");
        String pausa = ObtenerTeclado.dameTecla("");
     }            
    //Crea promoción Género
    public static PromocionesGenero nuevaGenero(){                
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        String pGenero;
        double pDescuento;
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Género");                
        System.out.println("===========================================");
        System.out.println("(Crear nueva promoción)");     
        
        //Solicita campos
        do{
            pNombre = ObtenerTeclado.dameCadenaCompleta("Nombre de la promoción :");              
        }while("".equals(pNombre));
                
        //Solicita Fecha de Inicio
        do{
            pFechaInicio = ObtenerTeclado.dameFecha("Fecha de inicio de la promoción (dd/mm/yyyy) :");
        }while(pFechaInicio == null);

        //Solicita Fecha Final        
        do{
            pFechaFinal = ObtenerTeclado.dameFecha("Fecha final de la promoción (dd/mm/yyyy) :");
                if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                        System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                        pFechaFinal=null;  
                }                                      
        }while(pFechaFinal == null);
                
        //Solicita nombre del Género
        do{
            pGenero = ObtenerTeclado.dameCadenaCompleta("Indica el Género de la promoción :");
        }while("".equals(pGenero));
        
        //Solicita Porcentaje de descuento
        do{
            pDescuento = ObtenerTeclado.dameEntero("Indica el Descuento de la promoción (Entero) : ");
        }while(pDescuento <1 || pDescuento >100);
                        
        //Crea objeto
        PromocionesGenero nuevaProm = new PromocionesGenero(pNombre.toUpperCase(), pFechaInicio, pFechaFinal, true, pGenero, pDescuento, "Género");                                             
        
        return nuevaProm;
    }         
    //Modifica promoción Género            
    public static PromocionesGenero modificaGenero(){
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        Boolean pActivo; //True = Activo 
        String ppActivo;
        String pGenero;
        double pDescuento=0;
        int cuenta=0;
        List<PromocionesGenero> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy"); 
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Género");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromocionesGenero("*");        
        System.out.println();        
        for(PromocionesGenero l: lst){
            System.out.println(l);            
        }        
        System.out.println("===========================================");        
        
        //Solicita el nombre de la promoción a modificar
        do{
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("*** Indica el nombre de la promoción a modificar : ***");  
            }while("".equals(pNombre));
            
            lst = PersistenciaPromocion.getPromocionesGenero(pNombre);        
            cuenta = lst.size();                       
                                    
            if(cuenta==0){
                System.out.println("**** Este nombre de promoción no existe, intentalo nuevamente... ****");                
            }
        }while (cuenta==0);            
        
       limpiaPantalla();
        //Encabezado de modificación
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Genero");                
        System.out.println("===========================================");
        System.out.println("(Modificando Promoción: " + pNombre.toUpperCase() + ")");          
        
        PromocionesGenero edi = new PromocionesGenero(lst.get(0).getId(),lst.get(0).getNombre(),lst.get(0).getFechaInicio(),lst.get(0).getFechaFinal(),lst.get(0).isActiva(),lst.get(0).getNombreGenero(),lst.get(0).getDescuento(), "Género");        
        
        //Solicita campos
        String pregunta = "";
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar nombre de la promoción (si/no)? *** Valor actual : "+"("+edi.getNombre()+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("Indica el nuevo nombre de la promoción :" );  
            }while("".equals(pNombre));            
        }else{
            pNombre=edi.getNombre();
        }
            
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha de inicio de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaInicio())+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pFechaInicio = ObtenerTeclado.dameFecha("Indica la nueva fecha de inicio de la Promoción (dd/mm/yyyy) :");
              }while(pFechaInicio == null);                
        }else{
            pFechaInicio=edi.getFechaInicio();
        }        
        
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha final de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaFinal())+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pFechaFinal = ObtenerTeclado.dameFecha("Indica la nueva fecha final de la Promoción (dd/mm/yyyy) :");
                    if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                            System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                            pFechaFinal=null;  
                    }                                   
              }while(pFechaFinal == null);                
        }else{
            pFechaFinal=edi.getFechaFinal();
        }                
        
        String estadoActiva="";
        if (edi.isActiva()){
            estadoActiva="Activa";            
        }else{
            estadoActiva="Inactiva";
        }
        
        
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar estado de la promoción (si/no)? *** Valor actual : ("+estadoActiva+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
                do{
                    ppActivo = ObtenerTeclado.dameCadenaCompleta("Activar promoción (si/no)? :");  
                }while("".equals(ppActivo));
                
                if ("si".equals(ppActivo)){
                    pActivo=true;
                }else{
                    pActivo=false;
                }
        }else{
            pActivo=edi.isActiva();
        }       
        
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar nombre del Género (si/no)? *** Valor actual : ("+edi.getNombreGenero()+") ***");                               
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pGenero = ObtenerTeclado.dameCadenaCompleta("Indica el nuevo nombre del Género:");           
            }while("".equals(pGenero));
            
        }else{
            pGenero=edi.getNombreGenero();
        }     

        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar porcentaje de descuento de la promoción (si/no)? *** Valor actual : ("+edi.getDescuento()+") ***");                               
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pDescuento = ObtenerTeclado.dameEntero("Indica el nuevo porcentaje de la promoción (Entero):");           
            }while(pDescuento <0 || pDescuento >100);
            
        }else{
            pDescuento=edi.getDescuento();
        }                                   
        
        PromocionesGenero modificaProm = new PromocionesGenero(edi.getId(),pNombre.toUpperCase(), pFechaInicio, pFechaFinal, pActivo, pGenero, pDescuento, "Género");                                                                     
        
        return modificaProm;                                       
    }        
    //Consulta promociones Más por Menos
    public static void consultaMasPorMenos(){
        List<PromocionesMasPorMenos> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Más Por Menos !!");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromocionesMasPorMenos("*");        
        System.out.println();        
        for(PromocionesMasPorMenos l: lst){
            System.out.println(l);            
        }        
        System.out.println("==========================================="); 
        String pausa = ObtenerTeclado.dameTecla("");
     }   
    //Crea promoción Más Por Menos
    public static PromocionesMasPorMenos nuevaMasMenos(){                
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        int pAlquilados;
        int pCobrados;
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Más por Menos");                
        System.out.println("===========================================");
        System.out.println("(Crear nueva promoción)");     
        
        //Solicita campos
        do{
            pNombre = ObtenerTeclado.dameCadenaCompleta("Nombre de la promoción :");              
        }while("".equals(pNombre));
                
        //Solicita Fecha de Inicio
        do{
            pFechaInicio = ObtenerTeclado.dameFecha("Fecha de inicio de la promoción (dd/mm/yyyy) :");
        }while(pFechaInicio == null);

        //Solicita Fecha Final        
        do{
            pFechaFinal = ObtenerTeclado.dameFecha("Fecha final de la promoción (dd/mm/yyyy) :");
                if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                    System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                    pFechaFinal=null;
                }            
        }while(pFechaFinal == null);
                
        //Solicita Día de la semana
        do{
            pAlquilados = ObtenerTeclado.dameEntero("Indica el número de Alquileres (Entero) :");
        }while(pAlquilados <1 || pAlquilados>7);
        
        //Solicita Porcentaje de descuento
        do{
            pCobrados = ObtenerTeclado.dameEntero("Indica el número que se Cobrará (Entero) :");
                if(pCobrados >= pAlquilados){
                    System.out.println("El número de Cobrados debe ser menor al de Alquilados...");
                    pCobrados=0;
                }
        }while(pCobrados <1 || pCobrados >100);
                        
        //Crea objeto
        PromocionesMasPorMenos nuevaProm = new PromocionesMasPorMenos(pNombre.toUpperCase(), pFechaInicio, pFechaFinal, true, pAlquilados, pCobrados, "Más por Menos");                                             
        
        return nuevaProm;
    }   
    //Modifica promoción Más por Menos
    public static PromocionesMasPorMenos modificaMasMenos(){
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        Boolean pActivo; //True = Activo 
        String ppActivo;
        int pAlquilados;
        int pEntregados;
        int cuenta=0;
        List<PromocionesMasPorMenos> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Más por Menos");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromocionesMasPorMenos("*");        
        System.out.println();        
        for(PromocionesMasPorMenos l: lst){
            System.out.println(l);            
        }        
        System.out.println("===========================================");
        
        //Solicita el nombre de la promoción a modificar
        do{
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("*** Indica el nombre de la promoción a modificar : ***");  
            }while("".equals(pNombre));
            
            lst = PersistenciaPromocion.getPromocionesMasPorMenos(pNombre);        
            cuenta = lst.size();                       
                                    
            if(cuenta==0){
                System.out.println("**** Este nombre de promoción no existe, intentalo nuevamente... ****");
                System.out.println();
            }
        }while (cuenta==0);            
        
       limpiaPantalla();
        //Encabezado de modificación
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Genero");                
        System.out.println("===========================================");
        System.out.println("(Modificando Promoción: " + pNombre.toUpperCase() + ")");          
        
        PromocionesMasPorMenos edi = new PromocionesMasPorMenos(lst.get(0).getId(),lst.get(0).getNombre(),lst.get(0).getFechaInicio(),lst.get(0).getFechaFinal(),lst.get(0).isActiva(),lst.get(0).getNoAlquilados(),lst.get(0).getNoEntregados(),"Más por Menos");        
        
        //Solicita campos
        String pregunta = "";
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar nombre de la promoción (si/no)? *** Valor actual : "+"("+edi.getNombre()+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("Indica el nuevo nombre de la promoción :" );  
            }while("".equals(pNombre));
            
        }else{
            pNombre=edi.getNombre();
        }
            
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha de inicio de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaInicio())+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pFechaInicio = ObtenerTeclado.dameFecha("Indica la nueva fecha de inicio de la Promoción (dd/mm/yyyy) :");
              }while(pFechaInicio == null);                
        }else{
            pFechaInicio=edi.getFechaInicio();
        }        
        
       do{
           pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha final de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaFinal())+") ***");
       }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pFechaFinal = ObtenerTeclado.dameFecha("Indica la nueva fecha final de la Promoción (dd/mm/yyyy) :");
                    if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                        System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                        pFechaFinal=null;
                    }                
              }while(pFechaFinal == null);                
        }else{
            pFechaFinal=edi.getFechaFinal();
        }                
        
        String estadoActiva="";
        if (edi.isActiva()){
            estadoActiva="Activa";            
        }else{
            estadoActiva="Inactiva";
        }
        
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar estado de la promoción (si/no)? *** Valor actual : ("+estadoActiva+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
                ppActivo = ObtenerTeclado.dameCadenaCompleta("Activar promoción (si/no)? :");  
                if ("si".equals(ppActivo)){
                    pActivo=true;
                }else{
                    pActivo=false;
                }
        }else{
            pActivo=edi.isActiva();
        }
                           
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar número de Alquilados (si/no)? *** Valor actual : ("+edi.getNoAlquilados()+") ***");                               
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
                pAlquilados = ObtenerTeclado.dameEntero("Indica el número de Artículos Alquilados (Entero) :");                          
        }else{
            pAlquilados=edi.getNoEntregados();
        }     

        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar número de Cobrados (si/no)? *** Valor actual : ("+edi.getNoEntregados()+") ***");                               
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
                pEntregados = ObtenerTeclado.dameEntero("Indica el número de Artículos que se Cobrarán (Entero) :");           
                if(pEntregados<=pAlquilados){
                    System.out.println("El número de Artículos Cobrados debe ser menor al número de Artículos Entregados");
                    pEntregados=0;
                }
        }else{
            pEntregados=edi.getNoEntregados();
        }                                   
        
        PromocionesMasPorMenos modificaProm = new PromocionesMasPorMenos(edi.getId(),pNombre.toUpperCase(), pFechaInicio, pFechaFinal, pActivo, pAlquilados, pEntregados, "Más por Menos");                                                                     
        
        return modificaProm;                                       
    } 
    //Consulta promociones Puntos
    public static void consultaPuntos(){
        List<PromocionesPuntos> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Más Por Menos !!");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromocionesPuntos("*");        
        System.out.println();        
        for(PromocionesPuntos l: lst){
            System.out.println(l);            
        }        
        System.out.println("===========================================");   
        String pausa = ObtenerTeclado.dameTecla("");
     }     
    //Crea promoción nuevaPuntos
    public static PromocionesPuntos nuevaPuntos(){                
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        int pPuntos;
        //int pCobrados;
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Puntos");                
        System.out.println("===========================================");
        System.out.println("(Crear nueva promoción)");     
        
        //Solicita campos
        do{
            pNombre = ObtenerTeclado.dameCadenaCompleta("Nombre de la promoción :");              
        }while("".equals(pNombre));
        
        
        //Solicita Fecha de Inicio
        do{
            pFechaInicio = ObtenerTeclado.dameFecha("Fecha de inicio de la promoción (dd/mm/yyyy) :");
        }while(pFechaInicio == null);

        //Solicita Fecha Final        
        do{
            pFechaFinal = ObtenerTeclado.dameFecha("Fecha final de la promoción (dd/mm/yyyy) :");
                if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                    System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                    pFechaFinal=null;
                }            
        }while(pFechaFinal == null);
                
        //Solicita Puntos de Alquiler
        do{
            pPuntos = ObtenerTeclado.dameEntero("Indica el número de Puntos por Alquiler (Entero) :");
        }while(pPuntos==0);
        
        //Crea objeto
        PromocionesPuntos nuevaProm = new PromocionesPuntos(pNombre.toUpperCase(), pFechaInicio, pFechaFinal, true, pPuntos, "Puntos");                                             
        
        return nuevaProm;
    }   
    //Modifica promoción Puntos
    public static PromocionesPuntos modificaPuntos(){
        String pNombre;
        Date pFechaInicio = null;
        Date pFechaFinal = null;
        Boolean pActivo; //True = Activo 
        String ppActivo;
        int pPuntos;
        int cuenta=0;
        List<PromocionesPuntos> lst = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
                
        //Encabezado
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Puntos");                
        System.out.println("===========================================");
        System.out.println("(Promociones existentes)");  
        
        //Muestra todas las promociones
        lst = PersistenciaPromocion.getPromocionesPuntos("*");        
        System.out.println();        
        for(PromocionesPuntos l: lst){
            System.out.println(l);            
        }        
        System.out.println("===========================================");
        
        //Solicita el nombre de la promoción a modificar
        do{
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("*** Indica el nombre de la promoción a modificar : ***");  
            }while("".equals(pNombre));
            
            lst = PersistenciaPromocion.getPromocionesPuntos(pNombre);        
            cuenta = lst.size();                       
                                    
            if(cuenta==0){
                System.out.println("**** Este nombre de promoción no existe, intentalo nuevamente... ****");
                System.out.println();
            }
        }while (cuenta==0);            
        
       limpiaPantalla();
        //Encabezado de modificación
        System.out.println("ESTAS EN: ** Menú Principal//Menú Promociones//Genero");                
        System.out.println("===========================================");
        System.out.println("(Modificando Promoción: " + pNombre.toUpperCase() + ")");          
        
        PromocionesPuntos edi = new PromocionesPuntos(lst.get(0).getId(),lst.get(0).getNombre(),lst.get(0).getFechaInicio(),lst.get(0).getFechaFinal(),lst.get(0).isActiva(),lst.get(0).getPuntos(),"Puntos");        
        
        //Solicita campos
        String pregunta = "";
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar nombre de la promoción (si/no)? *** Valor actual : "+"("+edi.getNombre()+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pNombre = ObtenerTeclado.dameCadenaCompleta("Indica el nuevo nombre de la promoción :" );  
            }while("".equals(pNombre));
            
        }else{
            pNombre=edi.getNombre();
        }
            
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha de inicio de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaInicio())+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pFechaInicio = ObtenerTeclado.dameFecha("Indica la nueva fecha de inicio de la Promoción (dd/mm/yyyy) :");
              }while(pFechaInicio == null);                
        }else{
            pFechaInicio=edi.getFechaInicio();
        }        
        
       do{
           pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar fecha final de la promoción (si/no)? *** Valor actual : ("+f.format(edi.getFechaFinal())+") ***");
       }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pFechaFinal = ObtenerTeclado.dameFecha("Indica la nueva fecha final de la Promoción (dd/mm/yyyy) :");
                    if ((long)pFechaFinal.getTime()<(long)pFechaInicio.getTime()){
                        System.out.println("La fecha final debe ser mayor o igual a la fecha inicial de la promoción...");
                        pFechaFinal=null;
                    }                
              }while(pFechaFinal == null);                
        }else{
            pFechaFinal=edi.getFechaFinal();
        }                
        
        String estadoActiva="";
        if (edi.isActiva()){
            estadoActiva="Activa";            
        }else{
            estadoActiva="Inactiva";
        }
        
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar estado de la promoción (si/no)? *** Valor actual : ("+estadoActiva+") ***");
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
                do{
                    ppActivo = ObtenerTeclado.dameCadenaCompleta("Activar promoción (si/no)? :");  
                }while("".equals(ppActivo));
                
                if ("si".equals(ppActivo)){
                    pActivo=true;
                }else{
                    pActivo=false;
                }
        }else{
            pActivo=edi.isActiva();
        }
                           
        do{
            pregunta=ObtenerTeclado.dameCadenaCompleta("Modificar número de Puntos a regalar por alquiler (si/no)? *** Valor actual : ("+edi.getPuntos()+") ***");                               
        }while("".equals(pregunta));
        
        if("si".equals(pregunta)){
            do{
                pPuntos = ObtenerTeclado.dameEntero("Indica el número de Puntos a regalar por alquiler (Entero) :");           
            }while(pPuntos==0);
            
        }else{
            pPuntos=edi.getPuntos();
        }                   
        
        PromocionesPuntos modificaProm = new PromocionesPuntos(edi.getId(),pNombre.toUpperCase(), pFechaInicio, pFechaFinal, pActivo, pPuntos, "Puntos");                                                                     
        
        return modificaProm;                                       
    } 
   
    public static void visualizarPromocionesActivas(Promociones promociones){
        List<Promociones> lst = new ArrayList();
        Promociones prom = promociones;
        
        lst=prom.visualizarPromocionesActivas();                                
        
        //Muestra todas las promociones          
        System.out.println();        
        for(Promociones p: lst){
            System.out.println(p);            
        }                    
     }    
    public static void visualizarPromocionesActivasTodas(){      
       
        Promociones.visualizarPromocionesActivasTodas();
     }         
                    
    // manejar evento de pulsación de cualquier tecla 
 //*  public void keyPressed( KeyEvent evento ) 
//   { 
//      String linea1;
//      linea1 = "Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ); 
//      System.out.println(linea1);
//      //establecerLineas2y3( evento ); 
//   } 

      
}


//Cargar información a un objeto mediante persistencia
//Public static Cliente buscaCliente (String dni);
//Cliente clienteEncontrado = Pers.dameCliente(dni);
//return clienteEncontrado;